/**
 * 会话管理模块的模拟数据
 */

// 用户数据
const users = [
  {
    id: 1,
    name: '张三',
    avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
    email: 'zhangsan@example.com',
    role: '管理员',
    department: '技术部',
  },
  {
    id: 2,
    name: '李四',
    avatar: 'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
    email: 'lisi@example.com',
    role: '开发人员',
    department: '研发部',
  },
  {
    id: 3,
    name: '王五',
    avatar: 'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png',
    email: 'wangwu@example.com',
    role: '产品经理',
    department: '产品部',
  },
  {
    id: 4,
    name: '赵六',
    avatar: 'https://cube.elemecdn.com/d/e2/3d18e7dfc29b54268b3481c9c5c26png.png',
    email: 'zhaoliu@example.com',
    role: '测试人员',
    department: '测试部',
  },
  {
    id: 5,
    name: '钱七',
    avatar: 'https://cube.elemecdn.com/6/94/4d3ea53c084bad6931a56d5158a48png.png',
    email: 'qianqi@example.com',
    role: '设计师',
    department: '设计部',
  },
]

// 数据集
const datasets = [
  { id: 1, name: '产品文档集', description: '包含所有产品相关文档' },
  { id: 2, name: '技术文档集', description: '包含所有技术文档和API文档' },
  { id: 3, name: '客服知识库', description: '用于客服查询的知识库' },
  { id: 4, name: '法律文档集', description: '法律法规和合同文档' },
  { id: 5, name: '内部wiki', description: '公司内部知识库' },
]

// 模型类型
const modelTypes = [
  'gpt-3.5-turbo',
  'gpt-4',
  'gpt-4-turbo',
  'claude-2.1',
  'claude-3-opus',
  'gemini-pro',
]

// 状态类型
const statusTypes = ['success', 'processing', 'error', 'timeout', 'waiting']

// 状态对应文本
const statusTextMap = {
  success: '成功',
  processing: '处理中',
  error: '失败',
  timeout: '超时',
  waiting: '等待中',
}

// 错误类型
const errorTypes = [
  'timeout',
  'api_error',
  'invalid_request',
  'content_filter',
  'insufficient_tokens',
]

// 标签库
const tagPool = [
  '重要',
  '已解决',
  '待处理',
  '需跟进',
  '紧急',
  '产品相关',
  '技术问题',
  '功能建议',
  '错误报告',
  '内部使用',
  '客户询问',
  '性能优化',
  '安全问题',
  '配置说明',
  '接口对接',
  '部署问题',
  '权限问题',
  '数据问题',
  '业务逻辑',
  '用户体验',
]

// 生成随机标签
const generateRandomTags = () => {
  const tags = []
  const count = Math.floor(Math.random() * 4) // 0-3个标签
  for (let i = 0; i < count; i++) {
    const randomTag = tagPool[Math.floor(Math.random() * tagPool.length)]
    if (!tags.includes(randomTag)) {
      tags.push(randomTag)
    }
  }
  return tags
}

// 生成随机错误信息
const generateRandomError = () => {
  const errorType = errorTypes[Math.floor(Math.random() * errorTypes.length)]
  switch (errorType) {
    case 'timeout':
      return '请求超时，请稍后重试'
    case 'api_error':
      return 'API调用失败，服务器返回错误'
    case 'invalid_request':
      return '无效的请求参数，请检查输入'
    case 'content_filter':
      return '内容被过滤器拦截，可能包含不适当内容'
    case 'insufficient_tokens':
      return 'Token配额不足，请联系管理员'
    default:
      return '未知错误'
  }
}

// 生成随机时间戳（过去30天内）
const generateRandomTimestamp = () => {
  const now = new Date()
  const past = new Date(now.getTime() - Math.random() * 30 * 24 * 60 * 60 * 1000)
  return past.toISOString()
}

// 生成随机Token数
const generateRandomTokens = (isQuery = true) => {
  return isQuery
    ? Math.floor(Math.random() * 500) + 100 // 查询token: 100-600
    : Math.floor(Math.random() * 1500) + 500 // 响应token: 500-2000
}

// 生成随机响应时间（毫秒）
const generateRandomResponseTime = () => {
  return Math.floor(Math.random() * 5000) + 200 // 200ms-5200ms
}

// 查询示例
const querySamples = [
  {
    query: '如何使用新的API接口进行数据同步？',
    response:
      '要使用新的API接口进行数据同步，您需要按照以下步骤操作：\n\n1. 首先，确保您已经获取了API访问权限和密钥\n2. 使用POST请求访问同步端点: `/api/v2/sync`\n3. 请求头中需要包含授权信息: `Authorization: Bearer {your_api_key}`\n4. 请求体应包含以下字段：\n   - `source_id`: 数据源ID\n   - `target_id`: 目标存储位置ID\n   - `sync_mode`: 可选值为`full`或`incremental`\n   - `filters`: 可选的数据过滤条件\n\n示例请求:\n```json\n{\n  "source_id": "db_mysql_prod",\n  "target_id": "data_warehouse_1",\n  "sync_mode": "incremental",\n  "filters": {\n    "last_updated": "2023-01-01T00:00:00Z"\n  }\n}\n```\n\n成功时返回:\n```json\n{\n  "job_id": "sync_12345",\n  "status": "started",\n  "estimated_time": "300s"\n}\n```\n\n您可以使用返回的`job_id`通过`/api/v2/jobs/{job_id}`端点来检查同步作业的状态。',
  },
  {
    query: '产品A的价格是多少？我想了解不同套餐的区别。',
    response:
      '产品A目前有以下几种套餐价格：\n\n**基础版**：¥99/月\n- 包含核心功能\n- 最多支持5个用户\n- 5GB存储空间\n- 基础技术支持\n\n**专业版**：¥299/月\n- 包含所有基础版功能\n- 最多支持20个用户\n- 50GB存储空间\n- 优先技术支持\n- 高级报表功能\n\n**企业版**：¥999/月\n- 包含所有专业版功能\n- 无限用户数\n- 200GB存储空间\n- 24/7专属技术支持\n- 自定义集成能力\n- 专属客户经理\n\n所有套餐均提供14天免费试用。如果按年付费，可享受8折优惠。\n\n不同套餐的主要区别在于用户数量限制、存储空间大小、技术支持级别以及部分高级功能的可用性。如果您的团队规模较小，基础版可能足够；如果需要更多分析功能，建议选择专业版；而对于大型企业用户，企业版提供了最全面的服务和支持。\n\n您可以根据实际需求选择合适的套餐，也可以随时升级。',
  },
  {
    query: '如何解决系统偶尔出现的504错误？我们的用户报告在高峰期经常遇到这个问题。',
    response:
      '504错误（Gateway Timeout）通常表示服务器作为网关或代理，未能及时从上游服务器收到响应。这在高峰期尤为常见，可能与系统负载有关。以下是解决方案：\n\n### 短期解决方案\n\n1. **增加超时设置**：检查并增加Nginx、Apache或其他代理服务器的超时设置\n   ```nginx\n   # Nginx配置示例\n   proxy_connect_timeout 300s;\n   proxy_send_timeout 300s;\n   proxy_read_timeout 300s;\n   ```\n\n2. **实施限流机制**：使用令牌桶或漏桶算法控制请求速率\n\n3. **添加队列系统**：将请求放入队列，按服务器处理能力逐步处理\n\n### 中长期解决方案\n\n1. **水平扩展**：增加更多服务器实例处理请求\n\n2. **优化后端性能**：\n   - 检查并优化数据库查询\n   - 添加适当的索引\n   - 实现数据缓存层（Redis或Memcached）\n\n3. **实现微服务架构**：将系统拆分为多个独立服务，避免单点故障\n\n4. **CDN加速**：使用CDN分发静态资源，减轻主服务器负担\n\n5. **监控与预警**：\n   - 设置监控工具（如Prometheus+Grafana）\n   - 配置负载预警，提前扩容\n\n### 诊断步骤\n\n1. 检查服务器负载情况（CPU、内存、磁盘I/O）\n2. 分析应用日志，查找性能瓶颈\n3. 使用APM工具（如New Relic）追踪请求处理流程\n4. 评估数据库性能，检查慢查询\n\n建议先从监控系统入手，确定问题的确切原因，再有针对性地实施解决方案。',
  },
  {
    query:
      '帮我分析这段日志，找出可能的问题原因：\nERROR [2023-03-15 14:23:45] Failed to process transaction #45678, error: Connection reset by peer',
    response:
      '## 日志分析\n\n日志显示：\n```\nERROR [2023-03-15 14:23:45] Failed to process transaction #45678, error: Connection reset by peer\n```\n\n### 问题诊断\n\n"Connection reset by peer" 错误表明连接被远程服务器（peer）突然终止。这通常意味着：\n\n1. **网络不稳定**：在事务处理过程中出现网络中断\n\n2. **远程服务超时**：远程服务器可能设置了较短的超时时间，在事务完成前关闭了连接\n\n3. **远程服务崩溃**：处理事务的远程服务可能发生了崩溃或重启\n\n4. **防火墙/安全策略问题**：中间的防火墙或安全设备可能切断了长时间的连接\n\n### 可能的解决方案\n\n1. **重试机制**：\n   - 实现指数退避重试逻辑\n   - 确保事务操作具有幂等性，安全重试不会导致数据重复\n\n2. **连接管理**：\n   - 检查连接池配置，确保连接不被过早回收\n   - 实现连接探活（keepalive）机制\n   - 增加连接超时设置\n\n3. **监控与报警**：\n   - 设置针对此类错误的监控\n   - 监控远程服务的健康状况\n\n4. **日志增强**：\n   - 增加日志详细程度，记录事务处理的更多上下文\n   - 记录网络延迟数据\n\n### 下一步行动\n\n1. 检查事务 #45678 的详细情况，了解事务处理持续时间\n2. 检查同一时间点的系统资源使用情况\n3. 检查远程服务的负载和可用性记录\n4. 分析是否有类似错误的模式（特定时间、特定事务类型）\n\n这类问题通常与网络环境或服务器资源有关，建议与网络团队和远程服务提供方协作排查。',
  },
  {
    query: '我需要一份数据迁移计划模板，用于从旧系统迁移到新平台。',
    response:
      '# 数据迁移计划模板\n\n## 1. 项目概述\n\n- **项目名称**：[旧系统]至[新平台]数据迁移\n- **项目目标**：安全、完整地将数据从旧系统迁移至新平台\n- **项目负责人**：[负责人姓名]\n- **预计时间线**：[开始日期] 至 [结束日期]\n\n## 2. 迁移范围\n\n### 2.1 数据范围\n- [ ] 用户数据\n- [ ] 交易记录\n- [ ] 配置信息\n- [ ] 历史档案\n- [ ] 媒体文件\n- [ ] 其他: [详细说明]\n\n### 2.2 系统范围\n- **源系统**：[旧系统名称及版本]\n- **目标系统**：[新平台名称及版本]\n\n## 3. 迁移团队与职责\n\n| 角色 | 负责人 | 职责 |\n|------|--------|------|\n| 项目经理 | | 项目协调与管理 |\n| 数据分析师 | | 数据映射与转换规则设计 |\n| 开发工程师 | | 迁移脚本开发与执行 |\n| 测试工程师 | | 迁移结果验证 |\n| 系统管理员 | | 环境准备与系统配置 |\n| 业务专家 | | 提供业务需求与验收 |\n\n## 4. 风险评估与缓解措施\n\n| 风险 | 影响 | 可能性 | 缓解措施 |\n|------|------|--------|----------|\n| 数据丢失 | 高 | 中 | 迁移前完整备份 |\n| 系统停机时间过长 | 高 | 中 | 制定回滚计划，选择低峰时段 |\n| 数据不兼容 | 中 | 高 | 提前进行数据分析与测试 |\n| 性能问题 | 中 | 中 | 分批迁移，监控系统资源 |\n| [其他风险] | | | |\n\n## 5. 迁移策略\n\n- **迁移方法**：[ ] 一次性迁移 [ ] 分阶段迁移 [ ] 并行运行\n- **数据提取方式**：[直接数据库访问/API/文件导出等]\n- **数据转换规则**：[详细说明或引用附件]\n- **数据加载方式**：[批量导入/API调用等]\n\n## 6. 环境准备\n\n### 6.1 硬件需求\n- 服务器配置\n- 存储需求\n- 网络需求\n\n### 6.2 软件需求\n- 迁移工具\n- 中间件\n- 监控工具\n\n## 7. 详细迁移计划\n\n### 7.1 准备阶段\n- [ ] 数据分析与映射\n- [ ] 环境准备\n- [ ] 开发迁移脚本\n- [ ] 测试环境验证\n\n### 7.2 执行阶段\n- [ ] 系统通知用户\n- [ ] 源系统备份\n- [ ] 系统停机（如需）\n- [ ] 数据提取\n- [ ] 数据转换\n- [ ] 数据加载\n- [ ] 初步验证\n\n### 7.3 验证阶段\n- [ ] 数据完整性验证\n- [ ] 数据一致性验证\n- [ ] 功能测试\n- [ ] 性能测试\n\n### 7.4 上线阶段\n- [ ] 用户验收测试\n- [ ] 系统切换\n- [ ] 监控与支持\n\n## 8. 回滚计划\n\n- **触发条件**：[明确指出什么情况下需要回滚]\n- **回滚流程**：[详细步骤]\n- **回滚时间估计**：[时间]\n\n## 9. 验收标准\n\n- [ ] 所有数据迁移完成且通过验证\n- [ ] 系统功能正常运行\n- [ ] 性能满足预期\n- [ ] 用户可正常访问系统\n- [ ] [其他标准]\n\n## 10. 项目时间表\n\n| 阶段 | 开始日期 | 结束日期 | 负责人 |\n|------|----------|----------|--------|\n| 准备阶段 | | | |\n| 执行阶段 | | | |\n| 验证阶段 | | | |\n| 上线阶段 | | | |\n\n## 11. 沟通计划\n\n| 沟通对象 | 沟通内容 | 沟通频率 | 沟通方式 | 负责人 |\n|----------|----------|----------|----------|--------|\n| 项目团队 | 进度更新 | 每日 | 站会 | |\n| 管理层 | 项目状态 | 每周 | 报告 | |\n| 最终用户 | 系统变更 | 重要节点 | 邮件通知 | |\n\n## 附件\n- 数据映射文档\n- 测试案例清单\n- 系统架构图\n\n---\n\n您可以根据实际项目需求调整此模板的内容。在实施前，确保所有相关人员审核并同意此计划。',
  },
]

// 生成随机查询内容
const generateRandomQuery = () => {
  return querySamples[Math.floor(Math.random() * querySamples.length)]
}

// 生成随机参数对象
const generateRandomParameters = () => {
  const paramTypes = ['temperature', 'max_tokens', 'top_p', 'frequency_penalty', 'presence_penalty']
  const params = {}

  paramTypes.forEach((type) => {
    if (Math.random() > 0.5) {
      switch (type) {
        case 'temperature':
          params[type] = Number((Math.random() * 1).toFixed(1))
          break
        case 'max_tokens':
          params[type] = Math.floor(Math.random() * 2000) + 1000
          break
        case 'top_p':
          params[type] = Number((Math.random() * 0.5 + 0.5).toFixed(1))
          break
        case 'frequency_penalty':
        case 'presence_penalty':
          params[type] = Number((Math.random() * 2 - 1).toFixed(1))
          break
      }
    }
  })

  return params
}

// 生成示例记录数据
const generateRecords = (count = 100) => {
  const records = []

  for (let i = 1; i <= count; i++) {
    const user = users[Math.floor(Math.random() * users.length)]
    const dataset = datasets[Math.floor(Math.random() * datasets.length)]
    const modelType = modelTypes[Math.floor(Math.random() * modelTypes.length)]
    const status = statusTypes[Math.floor(Math.random() * statusTypes.length)]
    const queryTokens = generateRandomTokens(true)
    const responseTokens = generateRandomTokens(false)
    const queryContent = generateRandomQuery()

    const record = {
      id: i,
      user_id: user.id,
      user_name: user.name,
      user_avatar: user.avatar,
      user_email: user.email,
      user_role: user.role,
      dataset_id: dataset.id,
      dataset_name: dataset.name,
      query_content: queryContent.query,
      parameters: generateRandomParameters(),
      query_time: generateRandomTimestamp(),
      model_type: modelType,
      model_name: `${modelType.toUpperCase()} v1`,
      status: status,
      status_text: statusTextMap[status],
      query_tokens: queryTokens,
      response_tokens: responseTokens,
      total_tokens: queryTokens + responseTokens,
      response_time_ms: status === 'success' ? generateRandomResponseTime() : null,
      tags: generateRandomTags(),
      admin_notes: Math.random() > 0.8 ? `这是管理员对会话#${i}的备注` : '',
      error_message: status === 'error' ? generateRandomError() : null,
      response_content: status === 'success' ? queryContent.response : null,
    }

    records.push(record)
  }

  return records
}

// 生成用户统计数据
const generateUserStats = () => {
  return {
    queryCount: Math.floor(Math.random() * 1000) + 10,
    avgTokens: Math.floor(Math.random() * 1500) + 500,
    successRate: Number((Math.random() * 40 + 60).toFixed(1)), // 60%-100%
  }
}

// 生成趋势数据
const generateTrendData = (days = 30) => {
  const labels = []
  const queries = []
  const tokens = []
  const responseTime = []

  const now = new Date()

  for (let i = 0; i < days; i++) {
    const date = new Date(now)
    date.setDate(now.getDate() - (days - i - 1))
    labels.push(date.toISOString().split('T')[0])

    queries.push(Math.floor(Math.random() * 100) + 50)
    tokens.push(Math.floor(Math.random() * 50000) + 10000)
    responseTime.push(Math.floor(Math.random() * 2000) + 500)
  }

  return {
    labels,
    queries,
    tokens,
    responseTime,
  }
}

// 生成总览数据
const generateOverviewData = () => {
  return {
    totalQueries: 24756,
    todayQueries: 143,
    averageTokens: 1245,
    successRate: 95.7,
    weekQueriesGrowth: 12.3,
    successRateColor: '#67C23A',
  }
}

// 生成数据集分析数据
const generateDatasetAnalytics = () => {
  return {
    distribution: datasets.map((dataset) => ({
      name: dataset.name,
      count: Math.floor(Math.random() * 5000) + 1000,
    })),
  }
}

// 生成用户分析数据
const generateUserAnalytics = () => {
  return users.map((user) => ({
    userId: user.id,
    name: user.name,
    avatar: user.avatar,
    queryCount: Math.floor(Math.random() * 1000) + 10,
    tokenCount: Math.floor(Math.random() * 500000) + 50000,
    avgResponseTime: Math.floor(Math.random() * 3000) + 500,
  }))
}

// 生成内容分析数据
const generateContentAnalytics = () => {
  // 关键词云数据
  const keywords = [
    { text: 'API', value: 225 },
    { text: '数据库', value: 156 },
    { text: '用户界面', value: 132 },
    { text: '安全', value: 98 },
    { text: '性能', value: 87 },
    { text: '文档', value: 75 },
    { text: '测试', value: 65 },
    { text: '配置', value: 54 },
    { text: '部署', value: 52 },
    { text: '错误', value: 45 },
    { text: '权限', value: 41 },
    { text: '集成', value: 39 },
    { text: '监控', value: 36 },
    { text: '日志', value: 32 },
    { text: '报表', value: 28 },
    { text: '缓存', value: 26 },
    { text: '接口', value: 25 },
    { text: '迁移', value: 24 },
    { text: '备份', value: 22 },
    { text: '恢复', value: 20 },
  ]

  // 查询长度分布
  const lengthDistribution = [
    { range: '0-50字', count: 1245 },
    { range: '51-100字', count: 2354 },
    { range: '101-200字', count: 1832 },
    { range: '201-500字', count: 954 },
    { range: '501-1000字', count: 432 },
    { range: '>1000字', count: 123 },
  ]

  // 错误分析
  const errorAnalysis = [
    { errorType: 'timeout', count: 128, percentage: 42.5, description: '请求超时' },
    { errorType: 'api_error', count: 86, percentage: 28.6, description: 'API调用错误' },
    { errorType: 'invalid_request', count: 45, percentage: 15.0, description: '无效请求' },
    { errorType: 'content_filter', count: 24, percentage: 8.0, description: '内容被过滤' },
    { errorType: 'insufficient_tokens', count: 18, percentage: 6.0, description: 'Token不足' },
  ]

  return {
    keywordCloud: keywords,
    lengthDistribution,
    errorAnalysis,
  }
}

// 生成模型性能数据
const generateModelPerformance = () => {
  const models = modelTypes.map((type) => ({
    modelName: type,
    responseTime: Math.floor(Math.random() * 3000) + 500,
    tokenConsumption: Math.floor(Math.random() * 1500) + 500,
    successRate: Number((Math.random() * 30 + 70).toFixed(1)),
  }))

  // 转换为前端所需格式
  return {
    responseTime: models.map((model) => ({
      modelName: model.modelName,
      value: model.responseTime,
    })),
    tokenConsumption: models.map((model) => ({
      modelName: model.modelName,
      value: model.tokenConsumption,
    })),
    successRate: models.map((model) => ({
      modelName: model.modelName,
      value: model.successRate,
    })),
  }
}

// 导出所有模拟数据生成函数
export default {
  // 会话列表相关
  getRecords: (params = {}) => {
    let records = generateRecords(100)

    // 排序
    if (params.sortBy) {
      const sortField = params.sortBy
      const sortOrder = params.sortDesc === 'desc' ? -1 : 1

      records.sort((a, b) => {
        if (a[sortField] < b[sortField]) return -1 * sortOrder
        if (a[sortField] > b[sortField]) return 1 * sortOrder
        return 0
      })
    }

    // 筛选
    if (params.keyword) {
      const keyword = params.keyword.toLowerCase()
      records = records.filter(
        (record) =>
          record.query_content.toLowerCase().includes(keyword) ||
          record.user_name.toLowerCase().includes(keyword),
      )
    }

    if (params.status) {
      records = records.filter((record) => record.status === params.status)
    }

    if (params.dateRange && params.dateRange.length === 2) {
      const startDate = new Date(params.dateRange[0])
      const endDate = new Date(params.dateRange[1])

      records = records.filter((record) => {
        const recordDate = new Date(record.query_time)
        return recordDate >= startDate && recordDate <= endDate
      })
    }

    // 分页
    const page = params.page || 1
    const pageSize = params.pageSize || 10
    const start = (page - 1) * pageSize
    const end = start + pageSize
    const paginatedRecords = records.slice(start, end)

    return {
      records: paginatedRecords,
      total: records.length,
    }
  },

  // 会话详情
  getRecordById: (id) => {
    const records = generateRecords(100)
    return records.find((record) => record.id === Number(id)) || null
  },

  // 用户统计
  getUserStats: () => {
    return generateUserStats()
  },

  // 用户历史
  getUserHistory: () => {
    return {
      hasHistory: true,
      hasPrevious: true,
      hasNext: Math.random() > 0.5,
    }
  },

  // 上一条记录
  getPreviousRecord: (_, currentId) => {
    return { id: Number(currentId) - 1 }
  },

  // 下一条记录
  getNextRecord: (_, currentId) => {
    return { id: Number(currentId) + 1 }
  },

  // 分析模块相关
  getAnalyticsOverview: () => {
    return generateOverviewData()
  },

  getAnalyticsTrends: (timeDimension = 'day') => {
    return generateTrendData(
      timeDimension === 'day'
        ? 30
        : timeDimension === 'week'
          ? 12
          : timeDimension === 'month'
            ? 6
            : 24,
    )
  },

  getUserAnalytics: () => {
    return generateUserAnalytics()
  },

  getDatasetAnalytics: () => {
    return generateDatasetAnalytics()
  },

  getContentAnalytics: () => {
    return generateContentAnalytics()
  },

  getModelPerformance: () => {
    return generateModelPerformance()
  },
}
